#pragma once

#include <SDL.h>
#include <map>
#include <list>

#include "Interface/Interface.h"
#include "Inventory/Item.h"

using namespace std;

/* Główna klasa gry, odpowiada za całą logikę (ale praktycznie w ogóle nie za wyświetlanie).
	Singleton, gdyż klasy ekranów mogą stąd pobierać dane do wyświetlania siebie.
	Klasy podrzędne komunikują się z Game raczej poprzez SDL_PushEvent (SDL_USEREVENT), czasem zwracaną wartością. */
class Game {
	public:
		Interface* interface;
		bool isPaused;
		map<string, Armor> armors;
		map<string, Weapon> weapons;

	protected:
		static const unsigned loopTime = 50; //czas pomiędzy obiegami pętli ([ms]) - do regulacji

	public:
		static Game& GetInstance() {
			static Game instance;
			return instance;
		}
	
		/* Destruktor - niszczy interfejs */
		~Game();
		
		/* Inicjalizator - uruchamia i rysuje interfejs */
		void Start();
		
		/* Pauzuje grę */
		void Pause();
		
		/* Odpauzowuje grę */
		void Unpause();
		
		/* Zmienia status pauzy, wartość zwracana oznacza, czy po wykonaniu gra działa */
		bool TogglePause();
		
		/* Pętla zdarzeń, gdy się kończy, znaczy że należy skończyć program */
		void MainLoop();
		
		/* Wczytuje z pliku przedmioty */
		bool LoadItems();
};